package cl.sodexo.com.action;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
//import org.apache.struts.upload.FormFile;

import cl.sodexo.com.dto.Requerimiento;
import cl.sodexo.com.dto.Usuario;
import cl.sodexo.com.form.ListRequerimientoForm;
import cl.sodexo.com.utils.Constantes;

public class ListRequerimientosAction extends AbstractManagerDAO{
	
	private final static Logger logger = Logger.getLogger(ListRequerimientosAction.class);
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, 
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		HttpSession session	= request.getSession();
		Usuario user		= (Usuario) session.getAttribute(Constantes.USEROBJ); 
		
		if(!(Boolean) request.getSession().getAttribute(Constantes.SESSION)){
			return mapping.findForward(Constantes.ERROR); //TODO verificar página de dirección login
		}else if(!user.getPerfil().getIdPerfil().equals(Constantes.USER)
				&& !user.getPerfil().getIdPerfil().equals(Constantes.ADMIN)){
			return mapping.findForward(Constantes.ERROR); //TODO verificar página de dirección login
		}else{
			logger.info("session: " + user.getUsername());
    		
    		ListRequerimientoForm reqForm = (ListRequerimientoForm) form;
    		String userID = null;
    		
    		if(!user.getPerfil().getIdPerfil().equals(Constantes.ADMIN)){
    			userID = user.getIdUsuario();	
    		}
    		
    		String order = request.getParameter("order");
			logger.info("order: " + order);
			ArrayList<Requerimiento> listaRequerimientos = new ArrayList<Requerimiento>();
			
			if(order == null){
				listaRequerimientos = super.getRequerimientoDAO().getRequerimientos(userID);
				session.setAttribute("sort", false);
			}else if(order.equals("id")){
				if((Boolean) session.getAttribute("sort")){
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByIdASC(userID);
					session.setAttribute("sort", false);
				}else{
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByIdDESC(userID);
					session.setAttribute("sort", true);
				}
			}else if(order.equals("fechaIngreso")){
				if((Boolean) session.getAttribute("sort")){
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByFechaIngresoASC(userID);
					session.setAttribute("sort", false);
				}else{
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByFechaIngresoDESC(userID);
					session.setAttribute("sort", true);
				}
			}else if(order.equals("jefeProyecto")){
				if((Boolean) session.getAttribute("sort")){
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByJefeASC(userID);
					session.setAttribute("sort", false);
				}else{
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByJefeDESC(userID);
					session.setAttribute("sort", true);
				}
			}else if(order.equals("estado")){
				if((Boolean) session.getAttribute("sort")){
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByEstadoASC(userID);
					session.setAttribute("sort", false);
				}else{
					listaRequerimientos = super.getRequerimientoDAO().getRequerimientosOrderByEstadoDESC(userID);
					session.setAttribute("sort", true);
				}
			}else{
				listaRequerimientos = super.getRequerimientoDAO().getRequerimientos(userID);
				session.setAttribute("sort", false);
			}
			
			reqForm.setRequerimientos(listaRequerimientos);
    		
    	    return mapping.findForward(Constantes.SUCCESS);
		}
		
	}

}
